package com.udima.reglocation;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.udima.reglocation.entities.UserSession;
import com.udima.reglocation.rest.RestUser;
import com.udima.reglocation.util.AsyncTaskCompleteListener;
import com.udima.reglocation.util.HttpAsyncTask;
import com.udima.reglocation.util.LogHelper;
import com.udima.reglocation.util.PreferencesHandler;
import com.udima.reglocation.util.UserSessionHandler;

/**
 * Clase que implementa el formulario de login
 * 
 * @author luis
 * 
 */

public class LoginActivity extends Activity implements AsyncTaskCompleteListener {

	private Activity activity = this;
	private TextView lblGotoRegister;
	private Button btnLogin;
	private EditText inputUser;
	private EditText inputPassword;
	private static TextView loginErrorMsg;

	/**
	 * En la creación de la clase se instancian los objetos del formulario y se
	 * crean las funciones de escucha para los botones de login y logout
	 */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login_activity);

		inputUser = (EditText) findViewById(R.id.txtUser);
		inputPassword = (EditText) findViewById(R.id.txtPass);
		btnLogin = (Button) findViewById(R.id.btnLogin);
		loginErrorMsg = (TextView) findViewById(R.id.login_error);

		// Listener del boton login
		btnLogin.setOnClickListener(new View.OnClickListener() {

			public void onClick(View view) {

				PreferencesHandler ph = new PreferencesHandler(getApplicationContext());
				String appBaseUrl = ph.retrieveAppBaseUrl();

				// Asignación de valores a la clase "restUsuario"
				RestUser restUsuario = new RestUser();
				restUsuario.setUserName(inputUser.getText().toString());
				restUsuario.setPassword(inputPassword.getText().toString());

				// Serialización de la clase en formato Json dentro de la cadena
				// "loginUsuario"
				Gson gson = new Gson();
				String loginUsuario = gson.toJson(restUsuario);

				// Definición del callback particular al envio de parámetros del
				// login
				final AsyncTaskCompleteListener callback = new AsyncTaskCompleteListener() {

					@Override
					public void onTaskComplete(String result) {

						if (HttpAsyncTask.CONNECTIONERROR.equals(result)) {
							Toast.makeText(getBaseContext(), "Error conectando con el servidor", Toast.LENGTH_LONG).show();
						} else {
							// Primero se transforma el resultado a un objeto
							// Json
							try {
								JSONObject json = new JSONObject(result);

								// Se muestra el mesaje del resultado del login
								// generado por el servidor
								if (json.getString("responseSuccessful") == "true") {

									JSONObject jsonUserSession = json.getJSONObject("userSession");

									UserSession us = new UserSession();
									us.setUserId(jsonUserSession.getString("userId"));
									us.setSessionToken(jsonUserSession.getString("sessionToken"));
									UserSessionHandler ush = new UserSessionHandler(getApplicationContext());
									ush.storeUserSession(us);

									loginErrorMsg.setText("Login correcto! Usuario con ID " + jsonUserSession.getString("userId"));

									// Se redirecciona la actividad a la
									// siguiente
									// pantalla de menú de la aplicación
									Intent itemintent = new Intent(LoginActivity.this, TrackMenuActivity.class);
									LoginActivity.this.startActivity(itemintent);
								} else {
									loginErrorMsg.setText("LOGIN INCORRECTO");
								}
							} catch (JSONException e) {
								Toast.makeText(getBaseContext(), "Error grave!! Revise el log de la aplicación", Toast.LENGTH_LONG).show();
								LogHelper.logError("Error parsing json result", e);
							}
						}
					}
				};

				// Ejecución de la consulta al servicio rest de login
				new HttpAsyncTask(activity) {
					@Override
					protected void onPostExecute(String result) {
						super.onPostExecute(result);
						callback.onTaskComplete(result);
					}
				}.execute(appBaseUrl + "/rest/users/login/", loginUsuario);

			}
		});

		lblGotoRegister = (TextView) findViewById(R.id.link_to_register);
		lblGotoRegister.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent itemintent = new Intent(LoginActivity.this, RegisterUserActivity.class);
				LoginActivity.this.startActivity(itemintent);
			}
		});
	}

	@Override
	public void onTaskComplete(String result) {

	}


}